/* Die Klasse Ausleihe ist fuer einen Ausleihvorgang zustaendig
 * 
 * Datei: Ausleihe.java                Autor:   Antonia Wagner 
 * Datum: 05.11.11                     Version: 0.3 
 * 
 * Historie: 05.11.11 v0.1 von Autor erstellt  
 *           16.11.11 v0.2 Parameter geaendert
 *           21.11.11 v0.3 Methoden verlaengern und gibAusleihEnde()
 *                         eingefuegt und implementiert, Variable 
 *                         ausleihEnde eingefuegt, Methoden zur 
 *                         Berechnung der maximalen Anzahl an 
 *                         Verlaengerungen implementiert
 * 
 */

package personenverwaltung;

import medienverwaltung.Exemplar;

public class Ausleihe extends MedienVorgang
{
  private static final long serialVersionUID = -738453723514254037L;
  private static final int MAX_ANZ_VERLAENGERUNGEN = 2;

  private Datum ausleihEnde;
  private int anzVerlaengerungen = 0;


  public Ausleihe (Benutzer person, Exemplar exemplar)
  {
    super (person, exemplar);
    ausleihEnde = Datum.berechneDatum (datum, 
	person.gibRechte ().gibAusleihdauer ());
  }


  /**
   * 
   * @return das Ende der Ausleihfrist
   */
  public Datum gibAusleihEnde ()
  {
    return ausleihEnde;
  }


  /**
   * 
   * @return wie oft die entsprechende Ausleihe bereits verlaengert
   *         wurde
   */
  public int gibAnzahlVerlaengerungen ()
  {
    return anzVerlaengerungen;
  }


  /**
   * 
   * @return die maximale Anzahl an Verlaengerungen
   */
  public int maxAnzVerlaengerungen ()
  {
    return MAX_ANZ_VERLAENGERUNGEN;
  }


  /**
   * 
   * @return ob die maximale Anzahl an Verlaengerungen erreicht ist
   */
  public boolean maxAnzVerlaengerungenErreicht ()
  {
    return (MAX_ANZ_VERLAENGERUNGEN == anzVerlaengerungen);
  }


  /**
   * verlaengert ein Medium um die bei dem Benutzer hinterlegte
   * Verlaengerungsfrist
   */
  public void verlaengern ()
  {
    if (anzVerlaengerungen < MAX_ANZ_VERLAENGERUNGEN)
    {
      Datum tagesDatum = AktuellesDatum.gibAktuellesDatum ();
      ausleihEnde = Datum.berechneDatum (tagesDatum, 
          person.gibRechte ().gibAusleihdauer ());
      anzVerlaengerungen++;
    }
    else
    {
      throw new KannNichtMehrVerlaengertWerdenAusnahme ();
    }
  }
}
